package com.pengshun.modules.api.mapper;

import com.pengshun.modules.api.coal.domain.Coal;
import com.pengshun.modules.api.coal.domain.CoalRecord;
import com.pengshun.modules.api.coal.result.CoalKLineResult;
import com.pengshun.modules.api.coal.result.CoalPriceDate;
import com.pengshun.modules.api.coal.result.CoalPriceEchartsResult;
import com.pengshun.modules.api.coal.result.MerchantCoalResult;
import com.pengshun.modules.api.coal.service.dto.CoalDto;
import com.pengshun.modules.api.coal.service.dto.MerchantCoalDto;
import com.pengshun.modules.api.statistical.service.dto.CoalNewsPrice;
import com.pengshun.modules.api.statistical.service.dto.CoalStatisticalDto;
import com.pengshun.modules.api.statistical.service.dto.YearStatistical;
import com.pengshun.modules.domain.CoalStatistical;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

public interface PsCoalMapper {


    /**
     * 根据矿口id查询最近7天煤炭价格趋势
     *
     * @param mineMouthId
     * @return
     */
    List<CoalPriceEchartsResult> selectPriceByWeek(@Param("mineMouthId") Long mineMouthId);


    /**
     * 根据煤炭id查询最近7天煤炭价格趋势
     *
     * @param coalId
     * @return
     */
    List<CoalPriceEchartsResult> selectPriceByWeekAndCoalId(@Param("coalId") Long coalId);

    /**
     * 根据煤矿id查询最近12个月煤炭价格趋势
     *
     * @param mineMouthId
     * @return
     */
    List<CoalPriceEchartsResult> selectPriceByYear(Long mineMouthId);

    /**
     * 根煤炭id查询最近多少天煤炭价格趋势
     *
     * @param coalId
     * @return
     */
    List<CoalPriceDate> selectPriceByDayAndCoalId(@Param("coalId") Long coalId, @Param("day") Integer day);


    /**
     * 条件查询商户煤炭列表
     *
     * @param category
     * @param status
     * @param provinceId
     * @param cityId
     * @param districtId
     * @param page
     * @param size
     * @return
     */
    List<MerchantCoalResult> selectListBy(@Param("category") String category, @Param("status") Integer status, @Param("provinceId") Integer provinceId,
                                          @Param("cityId") Integer cityId, @Param("districtId") Integer districtId, @Param("page") int page, @Param("size") int size,
                                          @Param("lngX") BigDecimal lngX, @Param("latY")BigDecimal latY, @Param("level") Integer level,
                                          @Param("sort") Integer sort, @Param("mineMouthId") Long mineMouthId, @Param("coalCalorific") String coalCalorific,
                                          @Param("allSulphur") String allSulphur, @Param("serchHuifen") String serchHuifen,
                                          @Param("coalTechnologyCode") String coalTechnologyCode, @Param("name") String name, @Param("index") String index, @Param("categoryName") String categoryName);

    List<Coal> findBymineMouthId(@Param("mineMouthId") Long mineMouthId, @Param("code") String code);

    /**
     * 批量更新煤炭发布状态
     *
     * @param name
     * @param date
     * @param coalIds
     * @param status
     * @return
     */
    int updateStatus(@Param("name") String name, @Param("date") Date date, @Param("coalIds") String coalIds, @Param("status") Integer status);

    /**
     * 批量更新货运发布状态
     *
     * @param name
     * @param date
     * @param transporIds
     * @param ordinal
     * @return
     */
    @Update("  update  ps_transport  set status=#{ordinal} ,release_time=#{date},update_by=#{name} " +
            "        where transport_id in(${transporIds})")
    int updateTransportStatus(@Param("name") String name, @Param("date") Date date, @Param("transporIds") String transporIds, @Param("ordinal") int ordinal);

    /**
     * 查询指定年月的价格数据
     *
     * @param coalId
     * @param date
     * @return
     */
    List<CoalPriceDate> selectPriceByDateAndCoalId(@Param("coalId") Long coalId, @Param("date") Date date);

    /**
     * 查询指定年  季度平均数据
     *
     * @param coalId
     * @param date
     * @return
     */
    List<CoalPriceDate> selectPriceByjidu(@Param("coalId") Long coalId, @Param("date") Date date);

    /**
     * 查询指定年 每个月平均数据
     *
     * @param coalId
     * @param date
     * @return
     */
    List<CoalPriceDate> selectPriceByYears(@Param("coalId") Long coalId, @Param("date") Date date);


    List<CoalKLineResult> selectCoalKline(@Param("coalId")Long coalId, @Param("day") Integer day);

    @Select("SELECT `coal_price` coalPrice  FROM ps_coal_record  " +
            "WHERE `coal_id`=#{coalId} AND  create_time  < #{date} " +
            "ORDER BY  update_time  DESC LIMIT 1")
    CoalRecord selectOneBydate(@Param("coalId")Long coalId, @Param("date")String date);

    /**
     * 根据煤炭id 查询指定日期以前的 最近一条记录 按日期分组
     *
     * @return
     */
    @Select("SELECT ps.`id`,ps.`coal_price` AS coalPrice,ps.`price_unit` AS priceUnit  FROM  " +
            "ps_coal_record ps WHERE ps.`coal_id`=#{coalId} AND DATE_FORMAT( ps.`update_time`, '%Y-%m-%d' ) < #{date}  " +
            "ORDER BY ps.`update_time` DESC LIMIT 1 ")
    CoalPriceDate selectReordByDate(@Param("coalId")Long coalId, @Param("date") String date);

    /**
     * 查询商户煤炭详情
     * @param merchantCoalId
     * @return
     */
    MerchantCoalDto selectMerchantCoalDetil(@Param("merchantCoalId")Long merchantCoalId);

    /**
     * 查询煤炭详情
     * @param coalId
     * @return
     */
    CoalDto findCoalDetilById(@Param("coalId")Long coalId);

    /**
     * 查询年份平均值
     * @param coalId
     * @param startDate
     * @param endDate
     * @return
     */
    List<CoalPriceEchartsResult> selectLatelyYearByDate(@Param("coalId")Long coalId,@Param("startDate") Integer startDate,@Param("endDate") Integer endDate);

    /**
     * 查询最近几年的每月评价煤炭价格
     *
     * @param coalId
     * @param startDate
     * @param endDate
     * @return
     */
    List<CoalPriceEchartsResult> selectLatelyYearData(@Param("coalId") Long coalId ,@Param("startDate") Integer startDate,@Param("endDate") Integer endDate);

    /**
     * 根据日期查询煤炭折线图
     * @param coalId
     * @param startDate
     * @param endDate
     * @return
     */
    List<CoalPriceEchartsResult>  selectCoalBrokenLine(@Param("coalId") Long coalId, @Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 查询煤炭价格统计
     * @param page
     * @param size
     * @return
     */
    List<CoalStatisticalDto> findAll(@Param("page") Integer page, @Param("size") Integer size);

    /**
     * 查询煤炭统计 指数详情
     * @param coalId
     * @param type
     * @return
     */
    List<CoalStatisticalDto> selectCoalStatisticalDetil(@Param("coalId") Long coalId, @Param("type") Integer type);

    /**
     * 查询近三年同比数据
     * @param coalId
     * @return
     */
    List<YearStatistical> selectYearStatisticals(@Param("coalId") Long coalId);

    /**
     * 查询煤炭最新调价记录
     * @param page
     * @param size
     * @return
     */
    List<CoalNewsPrice> getCoalNewPriceList(@Param("page") Integer page, @Param("size") Integer size);
}